﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Pencas.Models;
using System.Data;

namespace Pencas.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            Session.Remove("emailIngresado");
            if (Session["userId"] != null) return RedirectToAction("ObtenerPronosticos", "Partidos");
            if (Session["tmpError"] != null)
            {
                ViewBag.ErrorMessage = Session["tmpError"];
            }
            Session.Remove("tmpError");

            return View();
        }

        public ActionResult Login(string email, string token)
        {
            Session.Remove("emailIngresado");

            if (email == null) return View("Index");

            DAOUsuario usuarioDAO = new DAOUsuario();

            try
            {
                DataTable usersTable = usuarioDAO.Login(email, token);
                int cantUsers = usersTable.Rows.Count;

                if (cantUsers == 0)
                {
                    ViewBag.ErrorMessage = "E-mail o código incorrecto";
                    Session["emailIngresado"] = email;
                    return View("Index");
                }
                else
                {
                    Session["userId"] = usersTable.Rows[0]["Id"];
                    Session["token"] = usersTable.Rows[0]["Token"];
                    Session["email"] = usersTable.Rows[0]["Email"];
                }
            }
            catch (Exception)
            {
                ViewBag.ErrorMessage = "Ocurrió un error inesperado. Inténtelo más tarde o contáctenos";
                return View("Index");
            }

            return RedirectToAction("ObtenerPronosticos", "Partidos");
        }

        [HttpPost]
        public ActionResult RecuperarClave(string email)
        {
            DAOMail mailDAO = new DAOMail();
            DAOToken tokenDAO = new DAOToken();
            JsonResult json = new JsonResult();
            json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

            try
            {
                DataTable tokensTable = tokenDAO.ObtenerTokensDeUsuario(email);
                int cantTokens = tokensTable.Rows.Count;
                string mensaje = "";

                if (cantTokens == 0)
                {
                    json.Data = "0"; //Código de error a capturar en la vista
                    return json;
                }
                else{
                    if (cantTokens == 1)
                    {
                        mensaje = "Su código en las pencas de La Blanqueada es: " + tokensTable.Rows[0]["Token"];
                    }
                    else
                    {
                        mensaje = "Sus códigos en las pencas de La Blanqueada son: ";
                        foreach (DataRow row in tokensTable.Rows)
                        {
                            mensaje += row["Token"] + ", ";
                        }
                        mensaje = mensaje.Substring(0, mensaje.Length - 2);
                    }
                }

                mailDAO.EnviarMail("password@appb5010f95b57043338881805abd6d02c1.mailgun.org", "Recuperación de código", "pencas123", email, "", "Recuperación de código", mensaje);

                json.Data = "1";
            }
            catch (Exception)
            {
                json.Data = "-1"; //Código de error a capturar en la vista
            }

            return json;
        }

        public PartialViewResult EnviarMail(string mail, string mensaje)
        {
            DAOMail mailDAO = new DAOMail();
            try
            {
                mailDAO.EnviarMail("password@appb5010f95b57043338881805abd6d02c1.mailgun.org", "Contacto", "pencas123", "pencasblanqueada@gmail.com", "", "Contacto", mensaje + "Mail enviado por: " + mail);
                ViewBag.Mensaje = "Se envió correctamente el mensaje. Responderemos a la brevedad";
                ViewBag.ColorTexto = "Green";
                return PartialView("_Mensaje");
            }
            catch (Exception)
            {
                ViewBag.Mensaje = "Ocurrió un error. Inténtelo más tarde";
                ViewBag.ColorTexto = "Red";
                return PartialView("_Mensaje");
            }
        }

        public ActionResult About()
        {
            return View();
        }

        public ActionResult VerTabla()
        {
            DAOPartido pronosticoDAO = new DAOPartido();
            List<string[]> posiciones = pronosticoDAO.GetPositions();
            string miPosicion = pronosticoDAO.GetMyPosition((string)Session["userId"]);
            ViewBag.Posiciones = posiciones;
            ViewBag.MiPosicion = miPosicion;
            return View("Posiciones");
        }

        public PartialViewResult GetUserScoreAndPosition(string token)
        {
            DAOPartido pronosticoDAO = new DAOPartido();
            List<string[]> resultados = new List<string[]>();
            try
            {
                resultados = pronosticoDAO.GetUserScoreAndPosition(token);
            }
            catch (NoExisteUsuarioException)
            {
                ViewBag.ColorTexto = "Red";
                ViewBag.Mensaje = "No hay jugadas registradas con ese e-mail";
                return PartialView("_Mensaje");
            }
            catch (Exception)
            {
                ViewBag.ColorTexto = "Red";
                ViewBag.Mensaje = "Ocurrió un error inesperado. Inténtelo más tarde";
                return PartialView("_Mensaje");
            }
            ViewBag.Resultados = resultados;
            return PartialView("_ListaPronosticos");
        }

        public ActionResult Reglamento()
        {
            return View();
        }

        public ActionResult Contacto()
        {
            return View();
        }

        public ActionResult Salir()
        {
            Session.Clear();

            return View("Index");
        }
    }
}